//树形dp - 战略游戏
#include <iostream>
#include <vector>
using namespace std;
const int N = 1600;
int f[N]; //f[x]表示以x为根的子树, 根节点放置士兵时, 覆盖所有边的最少士兵数量
int g[N]; //g[x]表示以x为根的子树, 根节点不放置士兵时, 覆盖所有边的最少士兵数量
int n;
vector<int> edges[N];

void dfs(int x, int fa)
{
    f[x] = 1;
    for(auto y : edges[x])
    {
        if(y == fa) continue; 
        dfs(y, x);
        f[x] += min(f[y], g[y]);
        g[x] += f[y];
    }
}

int main()
{
    cin >> n;
    for(int i = 1; i <= n; i++)
    {
        int x, k; cin >> x >> k;
        while(k--)
        {
            int y; cin >> y;
            edges[x].push_back(y);
            edges[y].push_back(x);
        }
    }
    dfs(0, -1);
    cout << min(f[0], g[0]) << endl;
    return 0;
}